The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices, and computer systems may be found in many different settings. Computer systems typically include a combination of hardware (e.g., semiconductors, circuit boards, etc.) and software (e.g., computer programs). As advances in semiconductor processing and computer architecture push the performance of the computer hardware higher, more sophisticated computer software has evolved to take advantage of the higher performance of the hardware, resulting in computer systems today that are much more powerful than those that existed just a few years ago.
Other changes in technology have also profoundly affected how we use computers. For example, the widespread proliferation of computers prompted the development of computer networks that allow computers to communicate with each other. With the introduction of the personal computer (PC), computing became accessible to large numbers of people. Networks for personal computers were developed to allow individual users to communicate with each other. In this manner, a large number of people within a company could communicate simultaneously over a network with a software application running on a single computer system.
The description which follows presupposes knowledge of network data communications and switches and routers as used in such communications networks. In particular, the description presupposes familiarity with the OSI model of network architecture which divides network operation into layers. A typical architecture based upon the OSI model extends from Layer 1 (also sometime identified as “L1 ”) being the physical pathway or media through which signals are passed upwards through Layers 2, 3, 4 and so forth to Layer 7, the last mentioned being the layer of applications programming running on a computer system linked to the network. In this document, mention of L1, L2 and so forth is intended to refer to the corresponding layer of a network architecture. The disclosure also presupposes a fundamental understanding of bit strings known as packets and frames in such network communication.
One of the ways in which enhanced performance of computer systems has been sought, as is well known to users of personal computer systems, is to increase the operating speed or basic clock rate of a microprocessor used as a system central processing unit or CPU. As the operating speed of CPUs has increased dramatically, data flow rates have come to exceed the access speed capabilities of main memory in such systems. At the same time, the quantity of memory accessed by the CPU has exploded. Such memory is typically present in both volatile and non-volatile forms, and the available memory storage of both types has greatly increased in recent times. This accentuates one of the main difficulties in computer systems, namely the mapping of “virtual memory addresses” as used by application software running on the CPU and “physical memory addresses” as used to access the appropriate memory element or controller and the specific location within the address space of such a device, either volatile, non-volatile or both. Memory elements and controllers, as here mentioned, are peripheral devices which support the functionality of the CPU.
Current computer system implementations provide as peripherals one or more memory controllers configured to present memory as a single, contiguous, physical address range along with a number of input/output or I/O controllers each assigned a unique address (or small range of addresses) outside the system memory space. An operating system (of which there are a large number including without limitation the various Windows products of Microsoft, OS/2, Linux and others) typically provides a much larger contiguous virtual memory space for the benefit of applications running on the system. When a system is first started up, much of the virtual memory space maps directly to physical memory. As demand for memory space increases and as application programs make varying demands for memory access, the operating system will “page out” idle memory blocks, through a storage I/O subsystem, to storage on a direct access storage device (DASD), commonly known as a hard disk, drive or file. As memory spaces are created, paged in, paged out, and eventually freed up, the mapping of virtual memory to physical memory becomes almost completely random within the memory available. Application software knows only virtual addresses, and each memory access issued must somehow present the appropriate physical address of the desired memory location to the memory controller or, if necessary, a page may need to be located on disk and paged in prior to accessing it in main memory. The process of mapping virtual addresses to physical addresses, also known as virtual address translation, contributes a significant performance robbing overhead to the overall operation of a computer system.